package com.api.phm.domain.vo;

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;

import java.util.Date;
import java.util.List;

@Getter
@Setter
public class AlarmRuleVo {
    private Long ruleId;
    private String ruleName;
    private JSONObject localRuleName;
    private String strRuleName;
    /**
     * 规则类型，1：单一参数，2：文字参数，3：组合型参数
     * 1：即时告警：匹配告警规则，如检测触发的规则与当前状态不同（告警等级不一样）立即告警或恢复。
     * 2：延时告警：在即时告警规则基础上添加延时规则，time字段为必填项。N秒后如没有下降或恢复则进行告警。
     * 3：重复告警：在即时告警基础上，如当前状态与前状态同级别也会告警
     */
    private String ruleType;
    /**
     * 是否重复告警: Y:是重复告警 N:非重复告警
     */
    private String ruleRepeat;
    /**
     * 设备ID
     */
    private Long robotId;
    /**
     * 数据来源 -》 device_param
     */
    private JSONObject deviceMap;
//    private Map<String, AlaRuleDevModel> deviceMap;
    /**
     * 入库使用
     */
    private String strDeviceMap;
    /**
     * 告警规则
     */
    private JSONArray rules;
    private String strRules;
    /**
     * 是否使用规则；Y:表示使用，N表示不使用
     */
    private String enable;
    /**
     * 联系人列表
     */
    private List<Long> contacts;
    private String strContacts;
    /**
     * 告警消息
     */
    private String alarmMessage;
    /**
     * 恢复消息
     */
    private String restoreMessage;
    /**
     * 描述
     */
    private String remark;
    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 创建人
     */
    private String createBy;
    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    /**
     * 更新人
     */
    private String updateBy;
    private String appLang;
    private Integer pageNum;
    private Integer pageSize;

    public void setLocalRuleName(JSONObject localRuleName) {
        this.localRuleName = localRuleName;
        this.strRuleName = localRuleName.toString();
    }

    public void setDeviceMap(JSONObject deviceMap) {
        this.deviceMap = deviceMap;
        this.strDeviceMap = deviceMap.toString();
    }

    public void setRules(JSONArray ruleJson) {
        this.rules = ruleJson;
        this.strRules = ruleJson.toString();
    }

    /**
     * 设置联系人
     *
     * @param contacts
     */
    public void setContacts(List<Long> contacts) {
        this.contacts = contacts;
        this.strContacts = contacts.toString();
    }

    public void initControl(String username, String appLang) {
        this.appLang = appLang;
        this.updateBy = username;
        this.createBy = username;
    }
}
